<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdn.ronghub.com/RongIMLib-2.3.2.min.js"></script>
</head>
<body>
   <button onclick="sendmes()">发送消息</button>
   <button onclick="sendTextMessage()">发送消息2</button>
</body>
<script>

    var appkey='pgyu6atqpezuu';
    RongIMLib.RongIMClient.init(appkey);
    // 设置连接监听状态 （ status 标识当前连接状态 ）
    // 连接状态监听器
    RongIMClient.setConnectionStatusListener({
        onChanged: function (status) {
            switch (status) {
                case RongIMLib.ConnectionStatus.CONNECTED:
                    console.log('链接成功');
                    break;
                case RongIMLib.ConnectionStatus.CONNECTING:
                    console.log('正在链接');
                    break;
                case RongIMLib.ConnectionStatus.DISCONNECTED:
                    console.log('断开连接');
                    break;
                case RongIMLib.ConnectionStatus.KICKED_OFFLINE_BY_OTHER_CLIENT:
                    console.log('其他设备登录');
                    break;
                case RongIMLib.ConnectionStatus.DOMAIN_INCORRECT:
                    console.log('域名不正确');
                    break;
                case RongIMLib.ConnectionStatus.NETWORK_UNAVAILABLE:
                    console.log('网络不可用');
                    break;
            }
        }});

    // 消息监听器
    RongIMClient.setOnReceiveMessageListener({
        // 接收到的消息
        onReceived: function (message) {
            // 判断消息类型
            switch(message.messageType){
                case RongIMClient.MessageType.TextMessage:
                    // console.log(message.content.content);
                    console.log(message);
                    // message.content.content => 消息内容
                    break;
                case RongIMClient.MessageType.VoiceMessage:
                    console.log(1);
                    // 对声音进行预加载
                    // message.content.content 格式为 AMR 格式的 base64 码
                    break;
                case RongIMClient.MessageType.ImageMessage:
                    console.log(2);
                    // message.content.content => 图片缩略图 base64。
                    // message.content.imageUri => 原图 URL。
                    break;
                case RongIMClient.MessageType.DiscussionNotificationMessage:
                    console.log(3);
                    // message.content.extension => 讨论组中的人员。
                    break;
                case RongIMClient.MessageType.LocationMessage:
                    console.log(4);
                    // message.content.latiude => 纬度。
                    // message.content.longitude => 经度。
                    // message.content.content => 位置图片 base64。
                    break;
                case RongIMClient.MessageType.RichContentMessage:
                    console.log(5);
                    // message.content.content => 文本消息内容。
                    // message.content.imageUri => 图片 base64。
                    // message.content.url => 原图 URL。
                    break;
                case RongIMClient.MessageType.InformationNotificationMessage:
                    console.log(6);
                    // do something...
                    break;
                case RongIMClient.MessageType.ContactNotificationMessage:
                    console.log(7);
                    // do something...
                    break;
                case RongIMClient.MessageType.ProfileNotificationMessage:
                    console.log(8);
                    // do something...
                    break;
                case RongIMClient.MessageType.CommandNotificationMessage:
                    console.log(9);
                    // do something...
                    break;
                case RongIMClient.MessageType.CommandMessage:
                    console.log(10);
                    // do something...
                    break;
                case RongIMClient.MessageType.UnknownMessage:
                    console.log(11);
                    // do something...
                    break;
                default:
                    console.log(12);
                // do something...
            }
        }
    });
    //连接服务器
    var token = "BRnBhx4kj9SZyhnq4dhjyVZ+rTOf70qq1TQcrkrWSbOImLv9TZXfws3cpXcYVUWTfOZ4NvraHewSpCjmzec38w==";

    RongIMClient.connect(token, {
        onSuccess: function(userId) {
            console.log("Connect successfully." + userId);
        },
        onTokenIncorrect: function() {
            console.log('token无效');
        },
        onError:function(errorCode){
            var info = '';
            switch (errorCode) {
                case RongIMLib.ErrorCode.TIMEOUT:
                    info = '超时';
                    break;
                case RongIMLib.ConnectionState.UNACCEPTABLE_PAROTOCOL_VERSION:
                    info = '不可接受的协议版本';
                    break;
                case RongIMLib.ConnectionState.IDENTIFIER_REJECTED:
                    info = 'appkey不正确';
                    break;
                case RongIMLib.ConnectionState.SERVER_UNAVAILABLE:
                    info = '服务器不可用';
                    break;
            }
            console.log(errorCode);
        }
    });
    //重新连接
    var callback = {
        onSuccess: function(userId) {
            console.log("Reconnect successfully." + userId);
        },
        onTokenIncorrect: function() {
            console.log('token无效');
        },
        onError:function(errorCode){
            console.log(errorcode);
        }
    };
    var config = {
        // 默认 false, true 启用自动重连，启用则为必选参数
        auto: true,
        // 重试频率 [100, 1000, 3000, 6000, 10000, 18000] 单位为毫秒，可选
        url: 'cdn.ronghub.com/RongIMLib-2.2.6.min.js',
        // 网络嗅探地址 [http(s)://]cdn.ronghub.com/RongIMLib-2.2.6.min.js 可选
        rate: [100, 1000, 3000, 6000, 10000]
    };
    RongIMClient.reconnect(callback, config);


    // var chatRoomId = "1297"; // 聊天室 Id。
    // var count = 10;// 拉取最近聊天最多 50 条。
    // RongIMClient.getInstance().joinChatRoom(chatRoomId, count, {
    //     onSuccess: function() {
    //         // 加入聊天室成功。
    //     },
    //     onError: function(error) {
    //         // 加入聊天室失败
    //     }
    // });
    // var order = RongIMLib.GetChatRoomType.REVERSE;// 排序方式。
    // RongIMClient.getInstance().getChatRoomInfo(chatRoomId, count, order, {
    //     onSuccess: function(chatRoom) {
    //         // chatRoom => 聊天室信息。
    //         // chatRoom.userInfos => 返回聊天室成员。
    //         // chatRoom.userTotalNums => 当前聊天室总人数。
    //     },
    //     onError: function(error) {
    //         // 获取聊天室信息失败。
    //     }
    // });

    //发送消息
    function sendmes(){
        // 定义消息类型,文字消息使用 RongIMLib.TextMessage
        var msg = new RongIMLib.TextMessage({content:"我是231",extra:"附加信息"});
        //或者使用RongIMLib.TextMessage.obtain 方法.具体使用请参见文档
        //var msg = RongIMLib.TextMessage.obtain("hello");
        var conversationtype = RongIMLib.ConversationType.CHATROOM; // 私聊
        var targetId = "1298"; // 目标 Id
        RongIMClient.getInstance().sendMessage(conversationtype, targetId, msg, {
                // 发送消息成功
                onSuccess: function (message) {
                    //message 为发送的消息对象并且包含服务器返回的消息唯一Id和发送消息时间戳
                    console.log("Send successfully");
                    // console.log(message);
                },
                onError: function (errorCode,message) {
                    var info = '';
                    switch (errorCode) {
                        case RongIMLib.ErrorCode.TIMEOUT:
                            info = '超时';
                            break;
                        case RongIMLib.ErrorCode.UNKNOWN_ERROR:
                            info = '未知错误';
                            break;
                        case RongIMLib.ErrorCode.REJECTED_BY_BLACKLIST:
                            info = '在黑名单中，无法向对方发送消息';
                            break;
                        case RongIMLib.ErrorCode.NOT_IN_DISCUSSION:
                            info = '不在讨论组中';
                            break;
                        case RongIMLib.ErrorCode.NOT_IN_GROUP:
                            info = '不在群组中';
                            break;
                        case RongIMLib.ErrorCode.NOT_IN_CHATROOM:
                            info = '不在聊天室中';
                            break;
                        default :
                            info = x;
                            break;
                    }
                    console.log('发送失败:' + info);
                }
            }
        );
    }
    //发送带用户信息的消息
    function sendTextMessage(){
        /*
        文档： http://www.rongcloud.cn/docs/web.html#5_1、发送消息
               http://rongcloud.cn/docs/api/js/TextMessage.html
        1: 单条消息整体不得大于128K
        2: conversatinType 类型是 number，targetId 类型是 string
        */

        /*
            1、不要多端登陆，保证所有端都离线
            2、接收 push 设备设置:
                （1）打开系统通知提醒
                （2）小米设置 “授权管理” －> “自己的应用” 为自启动
                （3）应用内不要屏蔽新消息通知
            3、内置消息类型，默认 push，自定义消息类型需要
               pushData 显示逻辑顺序：自定义 > 默认
            4、发送其他消息类型与发送 TextMessage 逻辑、方式一致
        */
        var pushData = "pushData" + Date.now();
        var conversationType = RongIMLib.ConversationType.CHATROOM;
        var targetId = "1298"; // 目标 Id
        var isMentioned = false;

        var content = {
            content: [
                "阿拉伯语：الشرق الأوسط ",
                "希伯来语：המזרח התיכון",
                "emoji: 😊 ",
                "希腊字母： π，α，β, ",
                "数字单位部分字符 如：× ",
                "拉丁文所有字符 如：Ο Ρ σ Ï Æ ",
                "拼音所有字符 如： ě ì ň ",
                "英文音标部分字符 如 ： ə ʃ ",
                "俄文部分字符 如 ：ш ; ⊇ â Œ Š ™ "
            ].join(","),
            user : {
                "id" : "this-is-a-test-id",	//不支持中文及特殊字符
                "name" : "张三",
                "portrait" : "https://avatars1.githubusercontent.com/u/10265829?s=96&v=4"
            },
            extra: "{\"key\":\"value\", \"key2\" : 12, \"key3\":true}"
        };

        var msg = new RongIMLib.TextMessage(content);

        var start = new Date().getTime();
        RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
            onSuccess: function (message) {
                // markMessage(message);
                // showResult("发送文字消息 成功",message,start);
            },
            onError: function (errorCode,message) {
                // showResult("发送文字消息 失败",message,start);
            }
        }, isMentioned, pushData);
    }
</script>
</html>